﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Seeker.Model.Interface;

namespace Seeker.DAL.Interface
{
    /// <summary>
    /// 获取管理员信息
    /// </summary>
    public interface IGetAUserInfo
    {
        /// <summary>
        /// 获取单个管理员信息
        /// </summary>
        /// <param name="uid">管理员id</param>
        /// <returns>管理员基本信息 IBaseAUserInfo</returns>
        IBaseAUserFullInfo GetInfo(int uid);

        /// <summary>
        /// 获取多个管理员信息
        /// </summary>
        /// <param name="current">当前页</param>
        /// <param name="pageSize">每页含有信息个数</param>
        /// <param name="where">筛选条件</param>
        /// <param name="orderBy">排序</param>
        /// <returns>多个管理员信息</returns>
        List<Model.AUsers> GetInfoList(int current, int pageSize, string where, string orderBy);

        /// <summary>
        /// 获取多个管理员信息
        /// </summary>
        /// <param name="current">当前页</param>
        /// <param name="pageSize">每页含有信息个数</param>
        /// <param name="where">筛选条件</param>
        /// <returns>多个管理员信息</returns>
        List<Model.AUsers> GetInfoList(int current, int pageSize, string where);

        /// <summary>
        /// 获取多个管理员信息
        /// </summary>
        /// <param name="current">当前页</param>
        /// <param name="pageSize">每页含有信息个数</param>
        /// <returns>多个管理员信息</returns>
        List<Model.AUsers> GetInfoList(int current, int pageSize);
    }


    /// <summary>
    /// 安全的设置管理员信息
    /// </summary>
    public interface ISetAUserSafeInfo
    {
        /// <summary>
        /// 设置单个管理员信息，不含密码
        /// </summary>
        /// <param name="user">用户信息，不含密码</param>
        /// <returns></returns>
        bool SetInfo(IBaseAUserInfo user);

        /// <summary>
        /// 设置多个管理员信息，不含密码
        /// </summary>
        /// <param name="users">用户信息，不含密码</param>
        /// <returns></returns>
        bool SetInfo(List<IBaseAUserInfo> users);
    }


    /// <summary>
    /// 不安全的设置管理员信息，将会改变密码
    /// </summary>
    public interface ISetAUserUnSafeInfo
    {
        /// <summary>
        /// 设置单个管理员信息，含密码，需要注意
        /// </summary>
        /// <param name="user">用户信息，含密码</param>
        /// <returns></returns>
        bool SetInfo(IBaseAUserFullInfo user);

        /// <summary>
        /// 设置多个管理员信息，含密码，需要注意
        /// </summary>
        /// <param name="users">用户信息，含密码</param>
        /// <returns></returns>
        bool SetInfo(List<IBaseAUserFullInfo> users);
    }


    /// <summary>
    /// 设置管理员信息（包含安全的与非安全的方法）
    /// </summary>
    public interface ISetAUserInfo : ISetAUserSafeInfo, ISetAUserUnSafeInfo
    {
    }


    /// <summary>
    /// 验证登陆
    /// </summary>
    public interface ILoginVerify
    {
        /// <summary>
        /// 登陆
        /// </summary>
        /// <param name="userName">用户名</param>
        /// <param name="password">密码</param>
        /// <returns></returns>
        IBaseAUserInfo SignIn(string userName, string password);
    }


    public interface IGetAdminGroupInfo
    {
        /// <summary>
        /// 获取组列表
        /// </summary>
        /// <returns></returns>
        List<IAdminGroupInfo> GetList();
    }

    public interface ISetAdminGroupInfo
    {
        /// <summary>
        /// 按分组ID删除相关信息
        /// </summary>
        /// <param name="gid">分组ID</param>
        /// <returns></returns>
        bool Delete(int gid);
        /// <summary>
        /// 按多个分组ID删除相关信息
        /// </summary>
        /// <param name="gids">多个分组ID，如：1,2,3</param>
        /// <returns></returns>
        bool Delete(string gids);
        /// <summary>
        /// 更新单个分组信息
        /// </summary>
        /// <param name="info">分组信息</param>
        /// <returns></returns>
        bool Update(IAdminGroupInfo info);
        /// <summary>
        /// 更新多个分组信息
        /// </summary>
        /// <param name="info">分组信息</param>
        /// <returns></returns>
        bool Update(List<IAdminGroupInfo> info);
        /// <summary>
        /// 添加单个分组信息
        /// </summary>
        /// <param name="info">分组信息</param>
        /// <returns></returns>
        bool Add(IAdminGroupInfo info);
        /// <summary>
        /// 添加多个分组信息
        /// </summary>
        /// <param name="info">分组信息</param>
        /// <returns></returns>
        bool Add(List<IAdminGroupInfo> info);
    }
}
